<?php
/**
 * * 创建型模式
 * 工厂方法模式和抽象工厂模式的核心区别
 * 工厂方法模式利用继承，抽象工厂模式利用组合
 * 工厂方法模式产生一个对象，抽象工厂模式产生一族对象
 * 工厂方法模式利用子类创造对象，抽象工厂模式利用接口的实现创造对象
 * 工厂方法模式可以退化为简单工厂模式(非23中GOF)
 *
 *
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2021/2/19 0019
 * Time: 17:29
 */

// 注册自加载
spl_autoload_register('autoload');

function autoload($class)
{
    require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';
}


/*********** test *************/

use factory\FruitsShop;
use factory\Orchard;
use factory\SampleFactory;

$orchard = new Orchard();

//果园生产苹果和香蕉
$orchard->produce('apple');
$orchard->produce('banana');

$fruitsShop = new FruitsShop();

//超市生产苹果和香蕉
$fruitsShop->produce('apple');
$fruitsShop->produce('banana');

SampleFactory::produce('apple');
SampleFactory::produce('banana');